package com.chang.bootplus.controller;


import com.chang.bootplus.base.annotation.PublicVisit;
import com.chang.bootplus.base.utils.ApiResponse;
import com.chang.bootplus.base.utils.BeanUtil;
import com.chang.bootplus.po.*;
import com.chang.bootplus.service.ProductService;
import com.chang.bootplus.vo.ProductUnitVO;
import com.chang.bootplus.vo.ProductVO;
import com.chang.bootplus.vo.ProfitOfProportionVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 *  商品信息
 * </p>
 *
 * @author ning
 * @since 2022-01-25
 */
@RestController
@RequestMapping("/product")
@Api(tags = {"商品信息"})
@CrossOrigin(origins = "*")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ProductController {

    final ProductService productService;

    // 根据商品id查询到商品
//    @PostMapping("getById")
//    @ApiOperation(httpMethod = "POST", value = "根据商品id查询到商品")
//    public ApiResponse<ProductVO> getByIdProduct(@RequestBody ProductIdPO po){
//        return productService.getByIdProduct(po);
//    }

    // 根据传入的用户id (该用户为商家) , 查询其处于售卖状态 (即商品状态为0) 的所有商品中每种商品的总销售量获得的利润占其拥有的所有商品的所有销售量的总利润的比值
    @PostMapping("calProfitOfProportion")
    @ApiOperation(httpMethod = "POST", value = "根据传入的用户id (该用户为商家) , 查询其处于售卖状态 (即商品状态为0)" +
            " 的所有商品中每种商品的总销售量获得的利润占其拥有的所有商品的所有销售量的总利润的比值")
    public ApiResponse<ProfitOfProportionVO> calProfitOfProportion(@RequestBody UserIdPO po){
        return productService.calProfitOfProportion(po);
    }


    // 根据传入多少参数进行查找，根据排序字段的状态决定按照什么排序,这个动态sql里的id查找是按照商品单元的id进行查找
    @PublicVisit
    @PostMapping("list")
    @ApiOperation(httpMethod = "POST", value = "根据传入多少参数及排序字段决定查找与排序方式")
    public ApiResponse<ProductUnitVO> listProduct(@RequestBody ProductSelPO po){
        return productService.listProduct(po);
    }

    // 查询商品信息
    @PostMapping("getProductById")
    @PublicVisit
    @ApiOperation(httpMethod = "POST", value = "根据商品id得到单个商品")
    public ApiResponse<ProductVO> getProductById(@RequestBody ProductIdPO po){
        return productService.getProductById(po);
    }

    //添加商品信息 ，同时设置了添加时间
    @PostMapping("add")
    @ApiOperation(httpMethod = "POST", value = "添加商品信息")
    public ApiResponse<Void> addProduct(@RequestBody ProductPO po){
        return productService.addProduct(po);
    }

    // 修改商品信息 （包含修改商品状态 （如缺货等））
    @PostMapping("update")
    @ApiOperation(httpMethod = "POST", value = "修改商品信息")
    public ApiResponse<Void> updateProduct(@RequestBody ProductListPO po){
        return productService.updateProduct(po);
    }

    // 删除商品信息
    @PostMapping("delete")
    @ApiOperation(httpMethod = "POST", value = "删除商品信息")
    public ApiResponse<Void> deleteProduct(@RequestBody ProductIdPO po){
        return productService.deleteProduct(po);
    }
//
//    // 根据传入多少参数进行查找，根据排序字段的状态决定安按照什么排序
//    @PostMapping("listProduct")
//    @ApiOperation(httpMethod = "POST", value = "根据传入多少参数及排序字段决定查找与排序方式")
//    public ApiResponse<ProductVO> listProduct(@RequestBody ProductPO po){
//        return productService.listProduct(po);
//    }
//


}

